<!-- 
    一.数组
        1.数组的概念
            - 数组：一组任意类型或者相同类型的数据。
            - 除了Object 类型之外，Array 类型是ECMAScript 最常用的类型。
            - ECMAScript中的数组每个元素可以保存任何类型。ECMAScript中数组的大小也是可以调整的。

        2.数组的创建方式
            - 构造函数创建  var arr = new Array()
            - 字面量创建  var arr = [];
            - 区别：给构造函数传递一个值也可以创建数组,如果传递的是数字,数字表示数组的长度,字面量没有这个问题。

        3.数组的操作
            - 数组的索引：使用索引(index)下标来读取数组的值--下标是固定的，从0开始
            - 数组的length属性：读写数组的长度。

        4.数组的方法
            - 检测方法：Array.isArray()静态方法,构造函数下面的方法
            - 栈方法：push/pop
            - 队列方法：unshift/shift
            - 重排序方法：reverse/sort(字符串，数字，对象)
            - 操作方法：concat/slice/splice
            - 转换方法：join/toString:将数组转换成字符串。
            - 位置方法：indexOf/lastIndexOf
            - 迭代方法：every/some/filter/map/forEach
            - 归并方法：reduce/reduceRight
            - 查找方法：includes

        5.数组的遍历
            - for/forEach/map...

    二.自定义对象
        1.对象的概念：
        对象是javascript的数据类型,对象是一种复合值,它将很多值聚合在一起,可通过名字访问这些值。对象也看做是属性的无序集合，每个属性都是一个键/值对。

        2.对象的创建
            - 构造函数创建  var obj = new Object()
            - 字面量创建  var obj = {}

        3.对象属性值的读写 - 点操作符和中括号。
            - 点操作符后面仅能跟字符串。
            - 中括号里面可以是字符串和变量。

        4.对象的遍历 - for...in...

    三.严格模式
        1.严格模式的目的
            - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为,为未来新版本的Javascript做好铺垫
        2.严格模式使用标记
            - 代码的第一行添加字符串 - 'use strict'
        3.语法行为的改变。
            - 变量的显示声明。
            - 进制this指向全局对象。
            - 函数不能有重名的参数。
            - 禁止使用八进制。0开头的就是八进制  0x开头的是十六进制。
            - 禁止with关键字、不允许给arguments赋值。

    四.字符串对象
        1.了解包装对象的概念
        当要操作字符串、数字、布尔值的属性时，js会在内存中自动创建一个对象，用来对内置类型进行包装，使内置类型暂时拥有普通对象功能，可以存取属性，一旦引用结束，包装对象自动销毁

        2.类数组的概念：字符串就是类数组(arguments/获取多个元素对象/children/childNodes)
        也叫伪数组，在js中有一些对象它也拥有length属性，且拥有为非负整数的属性(索引)，但是它又不能调用数组的方法，这种对象被称为类数组对象.

        3.字符串下面的方法
            - substring 截取字符串
            - split 将字符串转换成数组
            - toUpperCase 字母转换成大写
            - toLowerCase 字母转换成小写
            - charCodeAt 获取对应的字符转换成unicode编码
            - String.fromCharCode 将unicode编码转换成对应的字符
            - charAt
            - trim
            - substr
            - replace - 替换
            - search - 搜索，类似于indexOf。
            - match - 匹配

        4.字符串和数组公有的方法
            - slice
            - concat
            - indexOf/lastIndexOf  - 输出索引位置
            - includes - 输出布尔值


    五.数学和日期对象
        1.数学方法 - 熟练掌握
            - Math.round() ：将括号里面的数字采用四舍五入形式取整。
            - Math.abs()：求绝对值
            - Math.ceil()：将括号里面的小数采用向上取整
            - Math.floor()：将括号里面的小数采用向下取整
            - Math.pow()：求幂，第一个参数是底数，第二个参数是指数。  **可以表示
            - Math.max()：求括号里面数字的最大值，数字之间逗号隔开。
            - Math.min()：求括号里面数字的最小值，数字之间逗号隔开。
            - Math.sqrt()：开根号。
            - Math.random()：随机数 -- [0,1)
            - Math.PI：表示π(3.14)

        2.日期对象
            - 创建日期对象 - 构造函数创建 - toLocaleString本地字符串显示
            - 日期对象下面的方法 - 熟练掌握
                - getFullYear / setFullYear
                - getMonth / setMonth
                - getDate / setDate
                - getDay
                - getHours / setHours
                - getMinutes / setMinutes
                - getSeconds / setSeconds
                - getTime
            - 注意事项
                - 注意老外的月份0-11
                - 注意老外的星期0-6
            - 设置日期
                - 利用字符串设置  new Date('2021-10-1 12:12:12')
                - 利用数字设置  new Date(2021,10,1,12,12,12) - 进位
                - 利用方法设置 setDate...

    六.BOM和DOM
        1.BOM的概念
            - BOM的操作和网页内容无关。
            - BOM的核心对象是window
            - window有双重角色，既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScript规定的全局对象

        2.window下面的子对象
            - location对象
                - href属性  读写浏览器地址栏的内容(location/location.assign())    
                - search属性 读取地址栏?后面的数据，多个数据通过&符号拼接。
                - hash属性 读取地址栏#后面的哈希值。
                - reload(true)方法   刷新页面,如果参数为true,通过缓存刷新。

        3.window下面的三个事件
            - onload事件：页面内容加载完成后触发此事件(DOM结构，图片等内容.....)
            - onscroll事件：拖动浏览器的滚动条触发此事件。
            - onresize事件：浏览器窗口缩放所触发的事件

        4.可视区的宽高:浏览器内部看得见的区域 + 滚动条距离(某些浏览器下面做兼容)
            - document.documentElement.clientWidth
            - document.documentElement.clientHeight
            - document.documentElement.scrollTop
            - document.documentElement.scrollLeft

        5.定时器
            - window.setInterval(函数名称，时间)  间隔定时器(反复调用)
            - window.clearInterval( 定时器的返回值 )  停止定时器
            - window.setTimeout(函数名称，时间)  延时定时器，执行一次
            - window.clearTimeout( 定时器的返回值 )  停止定时器

        6.打开关闭页面
            - window.open()
            - window.close()

        7.获取元素
            - querySelector()通过选择器获取元素，如果获取多个只返回第一个。
            - querySelectorAll()通过选择器获取元素，可同时获取多个元素，类数组

        8.创建、添加、删除、克隆、替换
            - 创建：document.createElement(元素节点)创建一个元素节点，参数是创建的元素。
            - 追加元素：父节点.appendChild(子节点) 把子节点插入到父节点的内部最后的位置
            - 插入元素：父节点.insertBefore(新节点,存在节点)在父节点内,把新的元素节点插入到已经存在的元素节点的前面
            - 删除子元素：父节点.removeChild(子节点)删除父节点内部的子节点  
            - 删除自身：元素对象.remove()

        9.读写属性(自定义和默认属性)
        - 读
            - 默认属性：通过getAttribute或者点操作符或者中括号读取。
            - 自定义属性：通过getAttribute读取,如果是点操作符或者中括号设置的，通过点操作符或者中括号读取。

        - 写
            - 默认属性和自定义属性：通过setAttribute或者点操作符或者中括号写入,后面的写入方式浏览器不可见。
        
        10.outerHTML/innerHTML/innerText 读写元素对象的内容
            - innerHTML:读写元素节点里的内容（包括元素）,从节点起始位置到终止位置全部内容,包括内部的元素。
            - outerHTML:读写元素节点里的内容（包括元素）,除了包含innerHTML全部内容外, 还包含元素节点本身。
            - innerText:读写某个元素节点的文本内容

        11.DOM元素类型
            - 节点可以分为元素节点、属性节点和文本节点...，他们分别用不同的数字代表类型。
              例如：元素(1) 属性(2) 文本(3) 注释(8)
            - 每个节点又有三个非常有用的属性，分别为：nodeName、nodeType、nodeValue

            - childNodes与children的区别和作用
                -children不考虑空白节点，而childNodes考虑空白节点，而且它们都是类数组，获取子元素。

        11.读写css样式的值 - 重点
         - 读：
            - offsetLeft/offsetTop/offsetWidth/offsetHeight/offsetParent
            - getComputedStyle - 标准浏览器获取任意的css属性值
              currentStyle - 低版本IE浏览器获取任意的css属性值
            - 行内的css样式采用style进行读取
              例如：div.style.width
        - 写：
            - 利用style逐个样式设置
            - 利用cssText整体样式设置
            - 利用类名(className)进行样式设置





    
             
        
        



    


    


    
    

 -->